/*
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
						  void *(*start_routine) (void *), void *arg);
		@参数
			pthread_t *thread：用于存储新创建线程的标识符
			onst pthread_attr_t *attr：包含了线程的属性信息 如果将此参数设置为 NULL，表示使用默认的线程属性。
			void *(*start_routine) (void *)：函数指针，函数将作为新线程的入口点，线程一旦创建成功，就会开始执行该函数
			void *arg：传递给 start_routine 函数的参数

*/

#include <head.h>
// 传递 结构体
typedef struct stu
{
	int id;
	char name[20];

} stu;

// 传递 普通变量
void *Func_pthread_1(void *arg)
{
	// 强制类型装换
	int val = *((int *)arg);
	printf("输入的数值=%d\n", val);
}
// 传递结构体
void *Func_pthread_2(void *arg)
{
	stu stu_1 = *((stu *)arg);
	printf("stu=%d  %s\n", stu_1.id, stu_1.name);
}

int main(int argc, char const *argv[])
{
	// 线程的创建
	pthread_t tid;

	/*******************传递普通变量***********************/
	int val_1 = 10;
	pthread_create(&tid, NULL, Func_pthread_1, (void *)&val_1);
	// 线程的回收
	pthread_join(tid, NULL);

	/*******************传递结构体***********************/

	stu st_1 = {.id = 1, .name = "我要放假"};
	pthread_create(&tid, NULL, Func_pthread_2, (void *)&st_1);
	// 一定不要忘记回收进程 在主线程中 等待 线程结束  会阻塞等待 直到目标结束
	pthread_join(tid, NULL);
	return 0;
}